import numpy as np

def numpy_demo_1():
    X1 = np.array(5)
    print("X1的值: ", X1)
    print("X1的阶: ", X1.ndim)
    print("X1的数据类型: ", X1.dtype)
    print("X1的形状: ", X1.shape)

    X2 = np.array([5, 6, 7, 8, 9])
    print("X2的值: ", X2)
    print("X2的阶: ", X2.ndim)
    print("X2的形状: ", X2.shape)

    weight = np.array([1, -1.8, 1, 1, 2]) # 权重向量，多项式参数
    X = np.array([1, 6, 7, 8, 9]) # 特征向量，一个特定样本中的特征值
    y_hat = np.dot(X, weight) # 通过点积运算构建预测函数
    print("函数返回结果: ", y_hat) # 输出预测结果

def numpy_demo_2():
    list = [1,2,3,4,5]
    array_01 = np.array([1,2,3,4,5]) # 列表转为数组
    array_02 = np.array((6,7,8,9,10)) #元组转为数组
    array_03 = np.array([[1,2,3],[4,5,6]]) # 列表转换为2D数组
    print('列表: ', list)
    print('列表转换为数组: ', array_01)
    print('元组转换为数组: ', array_02)
    print('2D数组: ', array_03)
    print('数组的形状: ', array_01.shape)

    array_04 = np.arange(1, 5, 1)
    array_05 = np.linspace(1, 5, 5)
    print(array_04)
    print(array_05)

    array_07 = np.array([[1,2,3],[4,5,6]])
    print(array_07, '形状是', array_07.shape)
    print(array_07.reshape(3,2), '形状是', array_07.reshape(3,2).shape)
    array_07 = array_07.T
    print(array_07, '形状是', array_07.shape)

    #python广播，自动填充低阶矩阵到高阶后，与高阶矩阵进行运算
    array_08 = np.array([[0,0,0],[10,10,10],[20,20,20],[30,30,30]])
    array_09 = np.array([[0,1,2]])
    print('08 + 09 的结果: ', array_08 + array_09)

    #矩阵点积计算
    vector_01 = np.array([[1,2,3], [4,5,6]])
    vector_02 = np.array([[1,4],[2,5],[3,6]])
    print('点积: ', np.dot(vector_01, vector_02))

    # 机器学习的几何意义
    # 机器学习模型是在更高维度的几何空间中对特征向量进行操作，变形，计算其间的距离，并寻找从特征向量到标签之间的函数拟合

    # 深度学习与数据流形
    # 数据特征维度过高，通过流形学习(特征提取与数据降维)，将高维特征空间中的样本分布群，“平铺”至一个低维空间，同事能保存原高维空间
    # 中样本点之间的局部位置相关信息
    # 深度神经网络，通过参数学习，展开了高维数据的流形


if __name__ == '__main__':
    # numpy_demo_1();
    numpy_demo_2()